/*
 * Edificio.cpp
 *
 *  Created on: 27/04/2013
 *      Author: juan
 */

#include "Edificio.h"
#define SEGCIL (20)
#define TRASLADO_PISO_Z (6.1)

using namespace std;

Edificio::Edificio(GLuint program, GLuint pisos) :
		Figure(program) {
	this->create_components(program, pisos);
}

void Edificio::create_components(GLuint program, GLuint pisos) {
	//this->lista_componentes = new list<DosPisos*>();
	DosPisos* figuraAux;
	for (int i = 0; i < pisos; i++) {
		figuraAux = new DosPisos(program, SEGCIL);
		figuraAux->traslate(glm::vec3(0.0f, 0.0f, TRASLADO_PISO_Z * i));
		this->lista_componentes.push_back(figuraAux);
	}
	piso = new Floor(program);
	piso->traslate(glm::vec3(0.0f, 0.0f, TRASLADO_PISO_Z * pisos));
	//this->lista_componentes->push_back(figuraAux);

}

Edificio::~Edificio() {
	for (list<DosPisos*>::iterator it = this->lista_componentes.begin(); it != this->lista_componentes.end();
			it++) {
		//delete (*it);
	}
	lista_componentes.clear();
	//delete (lista_componentes);

}

void Edificio::draw(GLuint program, glm::mat4 & world_matrix) {
	glm::mat4 matriz = world_matrix * this->model_matrix;
	for (list<DosPisos*>::iterator it = this->lista_componentes.begin(); it != this->lista_componentes.end();
			it++) {
		(*it)->draw(program, matriz);
	}
	piso->draw(program, matriz);
}

void Edificio::set_textures(unsigned int id_floor_texture, unsigned int id_stairs_texture,
		unsigned int id_columns_texture) {

	for (list<DosPisos*>::iterator it = this->lista_componentes.begin(); it != this->lista_componentes.end();
			it++) {
		(*it)->set_textures(id_floor_texture, id_stairs_texture, id_columns_texture);
	}
	piso->set_texture_id(id_floor_texture);
}
